package com.zysstudy.stream;

import java.util.Comparator;
import java.util.function.Consumer;

/**
 * @author zhaoyoushui
 * @date 2025/4/18 10:11
 * @Description
 * @Copyright 南京优通信息科技股份有限公司
 */
public class LambdaStudy {

    public static void main(String[] args) {
        // 创建 LambdaStudy 实例
        LambdaStudy lambdaStudy = new LambdaStudy();
        // 通过实例调用非静态方法
        lambdaStudy.demo1();
        lambdaStudy.demo2();
        lambdaStudy.demo3();

    }

    /**
     * 无参数 无返回
     */
    private void demo1() {
        // 匿名类1
        Runnable runnable1 = new Runnable() {
            @Override
            public void run() {
                System.out.println("我是没有使用Lambda表达式：不简洁");
            }
        };


        //语法一： 无参数、无返回值，只有一个Lambda体
        // 当Lambda体只有一条语句的时候 return 和  {} 可以省略
        Runnable runnable2 = () -> System.out.println("我是使用Lambda表达式：简洁、灵活2");

        //语法一： 无参数、无返回值，多个Lambda体
        Runnable runnable3 = () -> {
            System.out.println("我是使用Lambda表达式：简洁、灵活33");
            System.out.println("我是使用Lambda表达式：简洁、灵活33");
        };

        runnable1.run();
        runnable2.run();
        runnable3.run();
    }


    /**
     * 语法二：Lambda有参数 无返回
     */
    private void demo2() {
        // 匿名类
        Consumer<String> consumer = new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        };
        consumer.accept("爱与被爱的区别");

        Consumer<String> consumer2 = s -> {
            System.out.println(s);
        };
        consumer2.accept("接受爱不一定爱对方，爱一定付出真心爱");
    }


    /**
     * 语法三： Lambda有2个参数时，并且有返回值
     */
    private void demo3() {
        Comparator<Integer> comparator = new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o1 < o2 ? 1 : 0;
            }
        };

        Comparator<Integer> comparator2 = (o1, o2) -> {
            return (o1 < o2) ? 1 : 0;
        };
        System.out.println("1与2比较结果是：" + comparator.compare(1, 2));
        System.out.println("1与2比较结果是：" + comparator2.compare(1, 2));
    }


    /**
     * 语法格式四： 类型推断： 数据类型可以省略、因为编译器可以推断出  成为“类型推断”
     */

    private void demo4() {

        Consumer<String> consumer = (String s) -> System.out.println(s);
        consumer.accept("Hello Lambda!");


        Consumer<String > consumer1 = (s)->System.out.println(s);
        consumer1.accept("lalala");



    }
}

//      静态 vs. 非静态方法
//      静态方法（static）属于类，可直接通过类名调用（如 LambdaStudy.main()）。
//      非静态方法属于对象实例，必须通过 new ClassName() 创建实例后调用。
//      this 的使用范围
//      this 只能在非静态方法中引用当前对象，不能在静态方法中使用。